
package com.punch.common.feign.fallback;


import com.punch.common.feign.FeignClassService;
import com.punch.common.vo.course.ClassesVO;
import com.punch.common.vo.course.CourseSettlementVO;
import com.punch.common.vo.course.MaterialSettlementVO;
import com.punch.common.vo.course.classes.FeignClassVO;
import com.punch.common.vo.course.report.CourseReportVO;
import com.punch.common.vo.course.report.OrganReportVO;
import com.punch.common.vo.order.StudentCourseClassVO;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;


/**
 * 学生Service降级工场
 *
 * @author xiaol
 * @date 2019/1/18
 */

@Slf4j
@Component
public class FeignClassServiceFallbackFactory implements FallbackFactory<FeignClassService> {

    @Override
    public FeignClassService create(Throwable throwable) {
        return new FeignClassService() {
            /**
             * 查询班级详情
             *
             * @param courseClassId 班级记录id
             * @return FeignClassVO
             * @author xiaol
             * @since 2020/7/14 10:51
             */
            @Override
            public FeignClassVO getFeignClassById(Long courseClassId) {
                log.error("通过班级Id查找班级异常:{}", courseClassId, throwable);
                return new FeignClassVO();
            }

            /**
             * 根据学校id查询对应的入驻机构数量
             *
             * @param schoolId 学校id
             * @return Integer
             * @author xiaol
             * @since 2020/7/14 10:51
             */
            @Override
            public List<OrganReportVO> getOrganCount(Long schoolId) {
                log.error("根据学校id查询对应的入驻机构数量异常:{}", schoolId, throwable);
                return new ArrayList<>();
            }

            /**
             * 根据创建人id（学校id）查询对应的开课数量
             *
             * @param createId 学校id
             * @return Integer
             * @author xiaol
             * @since 2020/7/14 10:51
             */
            @Override
            public List<CourseReportVO> getCourseCount(Long createId) {
                log.error("根据创建人id（学校id）查询对应的开课数量异常:{}", createId, throwable);
                return new ArrayList<>();
            }

            /**
             * 根据课程分类id查询课程详情列表
             *
             * @param categoryId 课程分类id
             * @return List<ClassesVO>
             * @author xiaol
             * @since 2020/7/23
             */
            @Override
            public List<ClassesVO> getClasses(Long categoryId) {
                log.error("根据课程分类id查询课程详情列表异常:{}", categoryId, throwable);
                return new ArrayList<>();
            }

            /**
             * 报名修改班级课程的报名人数异常
             *
             * @param courseClassId 班级课程id
             */
            @Override
            public Boolean updateSignUpNumber(Long courseClassId) {
                log.error("报名修改班级课程的报名人数异常:{}", courseClassId, throwable);
                return false;
            }

            /**
             * 取消订单修改班级课程的报名人数
             *
             * @param courseClassId 班级课程id
             */
            @Override
            public Boolean cancelSignUpNumber(Long courseClassId) {
                log.error("取消订单修改班级课程的报名人数异常:{}", courseClassId, throwable);
                return false;
            }

            /**
             * 获取课程班级教具结算信息
             *
             * @param courseClassId 班级课程id
             */
            @Override
            public MaterialSettlementVO getMaterialSettlement(Long courseClassId) {
                log.error("获取课程班级教具结算信息异常:{}", courseClassId, throwable);
                return null;
            }

            /**
             * 查找未结算完成的课程
             */
            @Override
            public List<CourseSettlementVO> listCourseSettlement() {
                log.error("查找未结算完成的课程异常", throwable);
                return new ArrayList<>();
            }

            /**
             * 保存学生课表
             *
             * @param classId              课程id
             * @param studentCourseClassVO 学生信息
             * @return long
             */
            @Override
            public Long saveStudentCourseSchedule(Long classId, StudentCourseClassVO studentCourseClassVO) {
                log.error("保存学生课表异常", throwable);
                return classId;
            }

            /**
             * 获取学生当前学期出勤率
             *
             * @param studentId 学生id
             * @param areaId    地区id,用于查询学期
             * @return double
             */
            @Override
            public Double attendanceRate(Long studentId, Integer areaId) {
                return 0d;
            }

            /**
             * 修改机构未审核状态下提交的课程
             *
             * @param orgId 机构id
             */
            @Override
            public void updateUnAuditCommit(Long orgId) {
                log.error("修改机构未审核状态下提交的课程异常:{}", orgId, throwable);
            }

        };
    }
}

